iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
Security

你的程式真的安全嗎?從資安的角度做 code review系列 第 14

C - business logic (業務邏輯:邏輯錯誤)

  • 分享至 

  • xImage
  •  

又是遲到的一天哈哈~
下方程式碼片段全部都是擷取自 Secure Code Warrior 線上安全程式培訓平台,因為練習互動時的題目多半不會只有單一個檔案,可能涉及多個檔案、資料夾及多處地方修改,因此我的文章主要是針對最主要的區塊做修改及說明,若有不好理解的地方非常抱歉也還請見諒,也可以實際上去 Secure Code Warrior 玩玩看,搭配著互動,會更有感的學習哦~

business logic (業務邏輯:邏輯錯誤)

  • 形成原因:邏輯缺陷可能是編碼錯誤、設計缺陷、錯誤邏輯假設
  • 後果:根據不同應用程式有不同等級的影響
  • 實例:
    1. 有缺陷的訂單取消:攻擊者連到一電子商店,下單後進入結帳頁面,出現付款頁面時攻擊者取消訂單,錢沒有被收取,但因為邏輯錯誤購買的物品還是發送給攻擊者
    2. 折扣券重複使用:攻擊者連到一電子商店,獲得一25%off折價券,在購買時使用折價券,但由於邏輯漏洞,攻擊者可以多次重複使用折扣券導致100%off
    3. 增加銀行餘額:攻擊者登入銀行帳戶,將負金額轉入受害者帳戶https://bank.com/transfer? amount=-1000&from=attacker&to=victim
      負金額被錯誤解釋,導致受害者將自身金額轉入攻擊者帳號
  • 解決方法:
    • 開發時清楚定義及檢察業務規則
    • 使用威脅建模幫助識別設計缺陷
    • 根據法規及過去案例,分析並進行安全性測試
    • 記錄應用程式設計
    • 清楚陳述設計假設
    • 使用資料流程圖
    • 定期性安全性檢查與測試

第1題

錯誤區塊

situation2.loadFromFile("todaySituation", 3);
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台

解釋:
當以非預期引數值作為第二個引數呼叫loadFromFile函式時,函式邏輯將不正確,所有資料將被刪除。

主要修正方法

把第二個引數拿掉改成,main.cpp:

situation2.addFromFile("todaySituation");
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台

tacticalsituation.cpp:

if (sign != 1)
{
tracks_.clear();
}
if (sign == 1 || sign == 2)
{
    for(const auto & el: tempSituation)
    {
      this->addTrack(el);
      if (tracks_.max_size() == tracks_.size()) break;
    }
    return true;
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台

改成

if (sign == signLoad::REPLACE)
{
tracks_.clear();
}
for(const auto & el: tempSituation)
{
    this->addTrack(el);
    if (tracks_.max_size() == tracks_.size()) break;
}
return true;

bool TacticalSituation::addFromFile(const std::string & filename)
{
  return loadFromFile(filename, ADD);
}

bool TacticalSituation::replaceFromFile(const std::string & filename)
{
  return loadFromFile(filename, REPLACE);
}
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台

解釋:
避免使用不正確的引數值來呼叫函式。 loadFromFile函式已成為私有函式,並添加了兩個以有效值呼叫它的公共函式。


上一篇
C - XML external entity injection (XML 外部實體 (XXE))
下一篇
C - insufficiant validation (業務邏輯:驗證不足)
系列文
你的程式真的安全嗎?從資安的角度做 code review25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言